package view;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import model.Account;
import model.Database;
import model.Email;
import model.Indirizzo;
import model.SearchContact;
import model.Telefono;
import controller.ActionContactProp;
import controller.Engine;

@SuppressWarnings("serial")
public class ContactProp extends JFrame {

	JPanel contenitore;
	JPanel dati_account;
	JPanel contenitore2;
	JPanel dati_contatto;
	JPanel anagrafica;
	JPanel buttons;

	static JPanel telefono;
	static JPanel indirizzo;
	static JPanel email;
	static JPanel tel;
	static JPanel adr;
	static JPanel eml;

	static JLabel firstname;
	static JLabel secondname;
	static JLabel indirizzo_txt;
	static JLabel citta_txt;
	static JLabel provincia_txt;
	static JLabel cap_txt;
	static JLabel telefono_txt;
	static JLabel email_txt;
	static JLabel sector;
	static JLabel photo = null;
	static JLabel sex;
	private JLabel EML;
	private JLabel TL;
	private JLabel ADD;

	JButton operazione;

	private String LoAD = "resource"+File.separatorChar+File.separatorChar+"icona.png";
	private Image immaginecont = Toolkit.getDefaultToolkit().getImage(LoAD);
	// public static Account NuovoUtente = new Account(); //creo un account
	// temporaneo
	static ActionListener action = new ActionContactProp();
	public ContactProp CP = null;
	public final int acc_id;
	Account contatto = null;

	public ContactProp(int acc_id) {
		CP = this;
		this.acc_id = acc_id;
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				Engine.closeContactProp(CP.acc_id);
			}
		});
		for (int i = 0; i < SearchContact.search.size(); i++)
			if (SearchContact.search.get(i).getID() == acc_id)
				contatto = SearchContact.search.get(i);
		for (int i = 0; i < Database.Utente.getRubrica().size(); i++)
			if (Database.Utente.getRubrica().get(i).getID() == acc_id)
				contatto = Database.Utente.getRubrica().get(i);
		startCP();
	}

	public void startCP() {

		CP.setTitle(contatto.getFirstname()+" "+contatto.getSecondname());
		CP.setIconImage(immaginecont);
		contenitore = new JPanel();
		dati_account = new JPanel();
		contenitore2 = new JPanel();
		dati_contatto = new JPanel();
		anagrafica = new JPanel();
		buttons = new JPanel();

		tel = new JPanel();
		adr = new JPanel();
		eml = new JPanel();

		photo = Engine.setImage(contatto.getPhoto(), 300, 300);
		// photo.add(Box.createHorizontalGlue());
		photo.setName(contatto.getPhoto());
		// photo.add(Box.createHorizontalStrut(10));
		photo.setAlignmentX(CENTER_ALIGNMENT);

		firstname = new JLabel(contatto.getFirstname());
		firstname.setMaximumSize(new Dimension(100, 30));
		secondname = new JLabel(contatto.getSecondname());
		secondname.setMaximumSize(new Dimension(100, 30));

		sector = new JLabel(contatto.getSector());
		sector.setMaximumSize(new Dimension(50, 30));

		dati_account.setBackground(Color.black);
		dati_contatto.setBackground(Color.white);
		if (contatto.getSex() == 1) {
			contenitore2.setBackground(Color.pink);
			anagrafica.setBackground(Color.pink);
			buttons.setBackground(Color.pink);
		} else {
			contenitore2.setBackground(Color.cyan);
			anagrafica.setBackground(Color.cyan);
			buttons.setBackground(Color.cyan);
		}

		boolean flag = true;
		for (int i = 0; i < Database.Utente.getRubrica().size(); i++)
			if (contatto.getID() == Database.Utente.getRubrica().get(i).getID()) {
				flag = false;
				if (Database.Utente.getLevel()==512){
					operazione = new JButton("Chiudi");
					operazione.setName("chiudi");
				}
				else{
					operazione = new JButton("Rimuovi contatto");
					operazione.setName("rimuovi");
				}
				break;
			}
		if (flag) {
			flag = true;
			operazione = new JButton("Aggiungi contatto");
			operazione.setName("aggiungi");
		}
		Component comp = new Component() {
		};
		comp.setName("" + contatto.getID());
		operazione.add(comp);
		operazione.setPreferredSize(new Dimension(130, 30));
		operazione.addActionListener(action);

		if (contatto.getSex() == 1)
			sex = new JLabel("Donna");

		else
			sex = new JLabel("Uomo");

		sector.setToolTipText("Prefisso");
		firstname.setToolTipText("Nome");
		secondname.setToolTipText("Cognome");

		// costruisco la struttura del frame
		anagrafica.setLayout(new BoxLayout(anagrafica, BoxLayout.X_AXIS));
		anagrafica.setAlignmentX(CENTER_ALIGNMENT);
		anagrafica.add(sector);
		anagrafica.add(Box.createHorizontalStrut(10));
		anagrafica.add(firstname);
		anagrafica.add(Box.createHorizontalStrut(10));
		anagrafica.add(secondname);
		anagrafica.add(Box.createHorizontalStrut(10));
		anagrafica.add(Box.createHorizontalGlue());

		JLabel sex_label = new JLabel("Sesso");
		sex_label.setPreferredSize(new Dimension(100, 20));
		sex.add(Box.createHorizontalStrut(10));

		contenitore2.setLayout(new BoxLayout(contenitore2, BoxLayout.X_AXIS));
		contenitore2.add(Box.createHorizontalStrut(3));
		contenitore2.add(anagrafica);
		contenitore2.add(Box.createHorizontalStrut(3));
		contenitore2.add(sex);
		contenitore2.add(Box.createHorizontalStrut(3));

		dati_account.setLayout(new BoxLayout(dati_account, BoxLayout.Y_AXIS));
		dati_account.add(photo);
		dati_account.add(contenitore2);

		setAdr();
		setTel();
		setEml();

		dati_contatto.setLayout(new BoxLayout(dati_contatto, BoxLayout.Y_AXIS));
		dati_contatto.add(Box.createVerticalStrut(5));
		dati_contatto.add(adr);
		dati_contatto.add(Box.createVerticalStrut(3));
		dati_contatto.add(tel);
		dati_contatto.add(Box.createVerticalStrut(3));
		dati_contatto.add(eml);
		dati_contatto.add(Box.createVerticalStrut(5));

		buttons.add(operazione);

		contenitore.setLayout(new BoxLayout(contenitore, BoxLayout.Y_AXIS));
		contenitore.add(dati_account);
		contenitore.add(dati_contatto);
		contenitore.add(buttons);

		CP.add(contenitore);
		CP.setVisible(true);
		CP.setLocation(Engine.cntProp.size() * 50, Engine.cntProp.size() * 10);
		CP.pack();
		CP.requestFocus();
		CP.setResizable(false);
	}

	public void setAdr() {
		Vector<Indirizzo> VectIndirizzo = contatto.getIndirizzo();
		adr.setLayout(new BoxLayout(adr, BoxLayout.PAGE_AXIS));
		for (int i = 0; i < VectIndirizzo.size(); i++) {
			indirizzo = new JPanel();
			indirizzo.setBackground(Color.black);
			ADD = new JLabel("Indirizzo  " + (i + 1) + ":   ");
			ADD.setForeground(Color.white);
			indirizzo_txt = new JLabel(contatto.getIndirizzo().get(i)
					.getIndirizzo());
			citta_txt = new JLabel(contatto.getIndirizzo().get(i).getCitta());
			provincia_txt = new JLabel(contatto.getIndirizzo().get(i)
					.getProvincia());
			cap_txt = new JLabel("" + contatto.getIndirizzo().get(i).getCap());
			indirizzo_txt.setForeground(Color.white);
			citta_txt.setForeground(Color.white);
			provincia_txt.setForeground(Color.white);
			cap_txt.setForeground(Color.white);

			indirizzo.setMaximumSize(new Dimension(500, 20));
			indirizzo.setLayout(new BoxLayout(indirizzo, BoxLayout.X_AXIS));
			indirizzo.add(Box.createHorizontalStrut(2));
			indirizzo.add(ADD);
			ADD.setForeground(Color.white);
			indirizzo.add(Box.createHorizontalStrut(5));
			indirizzo.add(indirizzo_txt);
			indirizzo.add(Box.createHorizontalStrut(5));
			indirizzo.add(citta_txt);
			indirizzo.add(Box.createHorizontalStrut(5));
			indirizzo.add(provincia_txt);
			indirizzo.add(Box.createHorizontalStrut(5));
			indirizzo.add(cap_txt);
			indirizzo.add(Box.createHorizontalGlue());
			adr.add(indirizzo);
		}

	}

	public void setTel() {
		Vector<Telefono> VectTelefono = contatto.getTelefono();
		tel.setLayout(new BoxLayout(tel, BoxLayout.Y_AXIS));
		for (int i = 0; i < VectTelefono.size(); i++) {
			telefono = new JPanel();
			telefono.setBackground(Color.black);
			TL = new JLabel("Telefono " + (i + 1) + ":   ");
			telefono_txt = new JLabel(contatto.getTelefono().get(i).getNum());
			telefono_txt.setForeground(Color.white);

			telefono.setMaximumSize(new Dimension(500, 20));
			telefono.setLayout(new BoxLayout(telefono, BoxLayout.X_AXIS));
			telefono.add(Box.createHorizontalStrut(2));
			telefono.add(TL);
			TL.setForeground(Color.white);
			telefono.add(Box.createHorizontalStrut(5));
			telefono.add(telefono_txt);
			telefono.add(Box.createHorizontalGlue());
			tel.add(telefono);
		}

	}

	public void setEml() {
		Vector<Email> VectEmail = contatto.getEmail();
		eml.setLayout(new BoxLayout(eml, BoxLayout.Y_AXIS));
		for (int i = 0; i < VectEmail.size(); i++) {
			email = new JPanel();
			email.setBackground(Color.black);
			EML = new JLabel("E-mail     " + (i + 1) + ":   ");
			EML.setForeground(Color.white);
			email_txt = new JLabel(contatto.getEmail().get(i).getEmail());
			email_txt.setForeground(Color.white);

			email.setMaximumSize(new Dimension(500, 20));
			email.setLayout(new BoxLayout(email, BoxLayout.X_AXIS));
			email.add(Box.createHorizontalStrut(2));
			email.add(EML);

			email.add(Box.createHorizontalStrut(5));
			email.add(email_txt);
			email.add(Box.createHorizontalGlue());
			eml.add(email);
		}
	}

	public void stopContactProp(ContactProp c) {
		CP=c;
		CP.dispose();
	}
}
